// src/api.js
import axios from 'axios';

// 创建Axios实例
const instance = axios.create({
  baseURL: 'https://api.example.com', // 你的API基础URL
  timeout: 10000, // 请求超时时间
});

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么，例如添加认证头
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么
    return response.data;
  },
  (error) => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 处理401错误，例如跳转到登录页面
          break;
        case 404:
          // 处理404错误
          break;
        // 其他错误处理
        default:
          break;
      }
    }
    return Promise.reject(error);
  },
);

// 失败请求重发函数
const retryRequest = (error, retries = 3, delay = 1000) => {
  const config = error.config;
  if (!config || retries <= 0) {
    return Promise.reject(error);
  }
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(instance(config));
    }, delay);
  }).catch((err) => retryRequest(err, retries - 1, delay));
};

// 重新定义响应拦截器，加入失败请求重发逻辑
instance.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.config && error.response && error.response.status >= 500) {
      return retryRequest(error);
    }
    return Promise.reject(error);
  },
);

export default instance;
